1. Field of the Invention
This invention relates generally to testing the ability of a site which is accessible over the Internet to handle multiple TCP connections from a number of different sources. Specifically, the invention relates to a system and method for simulating a large quantity of Internet traffic in an efficient manner and recording information about how a site that is under test handles the simulated traffic.
2. Description of the Related Art
The increased popularity of the Internet means that a popular site on the Internet may receive a large quantity of traffic from a vast number of IP address over the Internet. It has become increasingly important to determine the ability of a site to handle such a large volume of traffic so that the ability of whatever load balancing and traffic distribution scheme that may be used by a site to distribute connections among a group of servers (sometimes referred to as a "server farm") is operating in an efficient manner. Also, it is important to evaluate the ability of an individual web server that is servicing a site to handle connections when the volume of traffic is high.
In order to adequately test the ability of an Internet site to handle a large number of connections, it is necessary to generate a large number of TCP connections to the site from difference IP addresses. Under real conditions, it is possible that a site may receive a large number of connections almost simultaneously from a number of different sites on the Internet that wish to connect to the site being evaluated. Handling the burstiness of such traffic is essential, since a large volume or burst of traffic that occurs during a very short period of time is often the cause of degraded performance and the inability of a server or a group of servers to adequately service customers.
One way to adequately test a site would be to use a large number of connection sources which could generate a large volume of Internet traffic from a number of different IP addresses in a short period of time. Such a system would be able to produce a large number of packets in parallel which would simulate real conditions when a number of users attempt to connect to a site. However, it may be impractical to use a large number of connection sources to test a site. Furthermore, coordinating the collection of data evaluating the site under test performance under the large burst of connections would be difficult since data would be obtained at a number of different sites.
It would be useful if an efficient method of creating a large number of TCP connections from a single TCP connection simulator could be developed that could both simulate a large number of connections from a large number of different IP addresses and could also simulate the large number of connections in a very short period of time so that the ability of the site under test to handle bursts of traffic could be evaluated.
Typically, when an application layer writes data to or reads data from a TCP layer, the application layer requests a TCP channel and then waits while data is read from or written to the channel. For example, in a UNIX implementation of TCP, a thread may either write data to a TCP channel or attempt to read data from a TCP channel. It should be understood that when the term thread is used, referring to a UNIX implementation, that other non-UNIX embodiments would use whatever appropriate type of process is available under whatever operating system is being used. For purposes of this description, the terms thread and process will be used interchangeably.
While TCP is handling the data, the thread is generally blocked, waiting for the data. Such an application would not be able to generate a large burst of traffic as described above without requiring a large number of threads to be simultaneously executing data read and data write operations to a TCP channel. The ability of such a device to generate the required volume of traffic in a short period of time would be limited by the ability of the device to handle a large number of threads in parallel to create a large number of connections. This limitation prevents the amount of bursty traffic that is desired from being generated by a single machine. Therefore, what is needed is a more efficient way to generate a large number of TCP connections from a large number of IP addresses using as few threads or active parallel processes as possible. Ideally, many connections could be generated in parallel without requiring the generation of an unwieldy number of threads.